package com.weipt.juc;

import java.util.concurrent.CountDownLatch;

/**
 * @author peter.wei 2020/09/15 20:24
 * @version 1.0
 * @company 终生学习
 * @description <br>peter.wei 2020/09/15 20:24
 * 线程减法计数器，用于多个线程协作，比如调用完所有微服务，给前端返回
 *
 * A CountDownLatch用给定的计数初始化。 await方法阻塞，直到由于countDown()方法的调用而导致当前计数达到零，
 * 之后所有等待线程被释放，并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。
 * 如果您需要重置计数的版本，请考虑使用CyclicBarrier 。
 **/
public class TestCountDownLatch {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(5);

        for (int i = 0; i <6 ; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"执行完了");
                countDownLatch.countDown();   //注意在线程执行体中
            }, String.valueOf(i)).start();
        }
        countDownLatch.await();   //countDownLatch初始5，直到为0，此处释放，之心下面
        System.out.println("线程执行完成");
    }
}